package kr.ac.kaist.resl.lilliput.rest;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import kr.ac.kaist.resl.lilliput.util.Util;
import org.bson.types.ObjectId;
import org.json.JSONException;
import org.json.JSONObject;
import org.restlet.ext.json.JsonRepresentation;
import org.restlet.resource.Get;
import org.restlet.resource.ServerResource;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import edu.stanford.smi.protege.model.Project;
import edu.stanford.smi.protege.server.RemoteProjectManager;
import edu.stanford.smi.protegex.owl.model.OWLModel;
import edu.stanford.smi.protegex.owl.model.OWLObjectProperty;
import edu.stanford.smi.protegex.owl.model.RDFIndividual;
public class PlaceEvents extends ServerResource {
@SuppressWarnings("rawtypes")
@Get("json")
public JsonRepresentation toJson() throws JSONException {
try {
String epc = (String)getRequest().getAttributes().get("uid");
//Save Space to Ontology if it is not saved
RemoteProjectManager rpm = RemoteProjectManager.getInstance();
Project p = rpm.getProject("localhost:5100", "Lilliput", "1234", "IoTSocialGraph", true);
OWLModel owlModel = (OWLModel)p.getKnowledgeBase();
RDFIndividual spaceInd = owlModel.getOWLIndividual(epc);
OWLObjectProperty objectEventProp = owlModel.getOWLObjectProperty("hasObjectEventIn");
OWLObjectProperty spaceEventProp = owlModel.getOWLObjectProperty("hasSpaceEvent");
JSONObject returnJSON = new JSONObject();
List<String> objectEventIDs = new ArrayList<String>();
List<String> spaceEventIDs = new ArrayList<String>();
Collection oeCol = spaceInd.getPropertyValues(objectEventProp);
Iterator oeIter = oeCol.iterator();
Collection seCol = spaceInd.getPropertyValues(spaceEventProp);
Iterator seIter = seCol.iterator();
while( oeIter.hasNext() )
{
RDFIndividual tempInd = (RDFIndividual)oeIter.next();
objectEventIDs.add(Util.individualToBrowserText(tempInd.getBrowserText()));
System.out.println(tempInd.getBrowserText() + "is added to list");
}
while( seIter.hasNext() )
{
RDFIndividual tempInd = (RDFIndividual)seIter.next();
spaceEventIDs.add(Util.individualToBrowserText(tempInd.getBrowserText()));
System.out.println(tempInd.getBrowserText() + "is added to list");
}
Mongo m = new Mongo("143.248.106.26", 27017);
DB db = m.getDB("Lilliput");
//������ size �� 1��.
for(int i = 0 ; i < objectEventIDs.size(); i ++ )
{
DBCollection collection = db.getCollection("ObjectEvent");
DBObject query = new BasicDBObject();
query.put("_id",new ObjectId(objectEventIDs.get(i)));
DBObject queriedObject = collection.findOne(query);
Map queriedMap = queriedObject.toMap();
JSONObject queriedJson = new JSONObject(queriedMap);
returnJSON.put("ObjectEvent", queriedJson);
}
for(int i = 0 ; i < spaceEventIDs.size(); i ++ )
{
DBCollection collection = db.getCollection("SpaceEvent");
DBObject query = new BasicDBObject();
query.put("_id",new ObjectId(spaceEventIDs.get(i)));
DBObject queriedObject = collection.findOne(query);
Map queriedMap = queriedObject.toMap();
JSONObject queriedJson = new JSONObject(queriedMap);
returnJSON.put("SpaceEvent", queriedJson);
}
JsonRepresentation representation = new JsonRepresentation(returnJSON);
return representation;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MongoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JSONObject err = new JSONObject();
err.put("message", "error occured");
JsonRepresentation representation = new JsonRepresentation(err);
return representation;
}
}